package com.dhcc.bpm.modules.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dhcc.bpm.modules.system.dto.MenuDTO;
import com.dhcc.bpm.modules.system.entity.Menu;
import com.dhcc.bpm.modules.system.vo.MenuVO;

import java.util.List;

/**
 * @ClassName MenuMapper
 * @Description Mapper 接口
 * @Author sjm
 * @Date 2020/2/21 0021 15:16
 * @Version V1.0
 * @Copyright: 2020 东华软件 . All rights reserved.
 **/
public interface MenuMapper extends BaseMapper<Menu> {

	/**
	 * @Description 自定义分页
	 * @Author sjm
	 * @Date 10:13 2020/2/22 0022
	 * @param page
	 * @param menu
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> selectMenuPage(IPage page, MenuVO menu);

	/**
	 * @Description 树形结构
	 * @Author sjm
	 * @Date 10:13 2020/2/22 0022
	 * @param
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> tree();

	/**
	 * @Description 授权树形结构
	 * @Author sjm
	 * @Date 10:13 2020/2/22 0022
	 * @param
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> grantTree();

	/**
	 * @Description 授权树形结构
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param roleId
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> grantTreeByRole(List<Long> roleId);

	/**
	 * @Description 顶部菜单树形结构
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> grantTopTree();

	/**
	 * @Description 顶部菜单树形结构
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param roleId
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> grantTopTreeByRole(List<Long> roleId);

	/**
	 * @Description 数据权限授权树形结构
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> grantDataScopeTree();

	/**
	 * @Description 接口权限授权树形结构
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> grantApiScopeTree();

	/**
	 * @Description 数据权限授权树形结构
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param roleId
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> grantDataScopeTreeByRole(List<Long> roleId);

	/**
	 * @Description 接口权限授权树形结构
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param roleId
	 * @return java.util.List<com.dhcc.bpm.modules.system.vo.MenuVO>
	 **/
	List<MenuVO> grantApiScopeTreeByRole(List<Long> roleId);

	/**
	 * @Description 所有菜单
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param
	 * @return java.util.List<com.dhcc.bpm.modules.system.entity.Menu>
	 **/
	List<Menu> allMenu();

	/**
	 * @Description 权限配置菜单
	 * @Author sjm
	 * @Date 10:14 2020/2/22 0022
	 * @param roleId
	 * @param topMenuId
	 * @return java.util.List<com.dhcc.bpm.modules.system.entity.Menu>
	 **/
	List<Menu> roleMenu(List<Long> roleId, Long topMenuId);

	/**
	 * @Description 所有菜单
	 * @Author sjm
	 * @Date 10:15 2020/2/22 0022
	 * @param
	 * @return java.util.List<com.dhcc.bpm.modules.system.entity.Menu>
	 **/
	List<Menu> allMenuExt();

	/**
	 * @Description 权限配置菜单
	 * @Author sjm
	 * @Date 10:15 2020/2/22 0022
	 * @param roleId
	 * @param topMenuId
	 * @return java.util.List<com.dhcc.bpm.modules.system.entity.Menu>
	 **/
	List<Menu> roleMenuExt(List<Long> roleId, Long topMenuId);

	/**
	 * @Description 菜单树形结构
	 * @Author sjm
	 * @Date 10:15 2020/2/22 0022
	 * @param roleId
	 * @return java.util.List<com.dhcc.bpm.modules.system.entity.Menu>
	 **/
	List<Menu> routes(List<Long> roleId);

	/**
	 * @Description 按钮树形结构
	 * @Author sjm
	 * @Date 10:15 2020/2/22 0022
	 * @param
	 * @return java.util.List<com.dhcc.bpm.modules.system.entity.Menu>
	 **/
	List<Menu> allButtons();

	/**
	 * @Description 按钮树形结构
	 * @Author sjm
	 * @Date 10:15 2020/2/22 0022
	 * @param roleId
	 * @return java.util.List<com.dhcc.bpm.modules.system.entity.Menu>
	 **/
	List<Menu> buttons(List<Long> roleId);

	/**
	 * @Description 获取配置的角色权限
	 * @Author sjm
	 * @Date 10:15 2020/2/22 0022
	 * @param roleIds
	 * @return java.util.List<com.dhcc.bpm.modules.system.dto.MenuDTO>
	 **/
	List<MenuDTO> authRoutes(List<Long> roleIds);
}
